我有这个哈希数组:-:name:Ben:age:18-:name:David:age:19-:name:Sam:age:18我需要按年龄对它们进行分组,所以它们最终会像这样:18:-:name:Ben:age:18-:name:Sam:age:1819:-:name:David:age:19我试过这样做:array=array.group_by&:age但是我得到这个错误:NoMethodError(undefinedmethod`age'for{:name=>"Ben",:age=>18}:Hash):我做错了什么?我正在使用Rails3.0.1和Ruby1.9.2
这不是Rails特有的——我只是以Rails为例。我在Rails中有一个模型:classItem(假设Item模型(类)有一个名为name的方法。)我什么时候需要使用self.name我什么时候可以只使用name(例如,#{name})? 最佳答案 在调用方法时更喜欢省略self.是惯用的;通常不需要。调用setter方法时,您必须使用self.foo=xxx,而不是foo=xxx,以便Ruby意识到您没有尝试创建新的局部变量。同样,如果您有一个与方法同名的现有局部变量do_something,这不太可能发生,您必须使用self.d
我正在尝试为我博客上的每条评论创建唯一的anchor,这样人们就可以获取anchor的url并将其粘贴到他们的浏览器中,这将自动加载页面并向下滚动到页面中的位置他们的评论开始了。也许我以错误的方式解决这个问题,但我已经尝试过但无济于事。评论View-失败1-在浏览器中粘贴时,此链接不会向下滚动到所需位置'posts',:action=>'show',:id=>comment.post,:anchor=>'comment_'评论Controller-失败2-在浏览器中正确的url但没有滚动发生它只是停留在页面的顶部redirect_to:controller=>'posts',:acti
extendself和module_function是实现它的两种ruby方法,因此您可以在模块上调用方法,如果包含该模块也可以调用它。这些方式的最终结果有什么不同吗? 最佳答案 module_function将给定的实例方法设为私有(private),然后复制并将它们作为公共(public)方法放入模块的元类中。extendself将所有实例方法添加到模块的单例中,保持它们的可见性不变。moduleMextendselfdefa;endprivatedefb;endendmoduleNdefc;endprivatedefd;e
在Rails模型中测试getter/setter对时,我发现了一个很好的行为示例,我一直认为这种行为很奇怪且不一致。在这个例子中,我处理的是classFolder.Folderbelongs_to:parent,:class_name=>'Folder'在getter方法上,如果我使用:defparent_nameparent.nameend……或者……defparent_nameself.parent.nameend...结果完全一样,我得到了父文件夹的名称。但是,在getter方法中,如果我使用...defparent_name=(name)parent=self.class.fi
谁能给我解释一下在方法定义中添加self是什么意思?是不是类似于java中的this关键字? 最佳答案 与其他语言不同,Ruby没有类方法,但它有附加到特定对象的单例方法。cat=String.new("cat")defcat.speak'miaow'endcat.speak#=>"miaow"cat.singleton_methods#=>["speak"]defcat.speak创建附加到对象cat的单例方法。当你写classA时,它等同于A=Class.new:A=Class.newdefA.speak"I'mclassA"e
这RubyStyleGuide告诉我们最好使用self.method_name而不是classmethod_name。但是为什么?classTestClass#badclass是否存在性能问题? 最佳答案 class善于将所有类方法放在同一个block中。如果在defself.method中添加方法form则不能保证(除了惯例和一厢情愿的想法)不会有额外的类方法隐藏在文件的后面。defself.method擅长显式声明方法是类方法,而使用class你必须自己去找容器。这些中哪一个对您来说更重要是一个主观决定,并且还取决于诸如有多少其
为什么这个Ruby对象的to_s和inspect方法看起来做同样的事情?p方法调用inspect和puts/print调用to_s来表示对象。如果我跑classGraphdefinitialize@nodeArray=Array.new@wireArray=Array.newenddefto_s#calledwithprint/puts"Graph:#{@nodeArray.size}"enddefinspect#calledwithp"G"endendif__FILE__==$0gr=Graph.newpgrprintgrputsgrend我明白了GGraph:0Graph:0那么,
据我对self的理解,它指的是类的当前实例。这不是一直以来的默认行为吗?例如,不是self.var_one=method(args)相当于var_one=method(args)如果是这样,self有什么用? 最佳答案 有几个重要的用途,其中大部分基本上是为了消除实例方法、类方法和变量之间的歧义。首先,这是定义类方法的最佳方式:classFoodefself.bar"classmethodbar"enddefbar"instancemethodbar"endendFoo.bar#returns"classmethodbar"foo=
在将近一个小时的时间里,我一直在用头撞墙,试图弄清楚这里出了什么问题,我确信(或者更确切地说,希望)这是我忽略的相当明显的事情。我使用的是Ruby1.9.1、Sinatra1.0和RMagick2.13.1。ImageMagick和RMagick已正确安装并正常运行——我已成功操作并保存了来自irb的图像。params数组的相关部分(为了可读性而更改格式):{"admin_user_new_image_file"=>{:filename=>"freddie-on-shetland-pony.png",:type=>"image/png",:name=>"admin_user_new_i